package com.dys.testarray;

import java.util.Arrays;

/**
 * @className: com.dys.testarray.ArrayDelete
 * @description: 数组的删除
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/07/13 下午6:27
 */
public class ArrayDelete {

    public static void main(String[] args) {
        deleteEle5_2();
    }

    /**
     * 给定一个数组，删除指定下标为2的元素
     */
    public static void deleteEle() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);
        // 3.删除指定下标的元素
        arr[2] = arr[3];
        arr[3] = arr[4];
        arr[4] = arr[5];
        arr[5] = 0;

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 给定一个数组，删除指定下标为2的元素
     */
    public static void deleteEle2() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);
        // 3.删除指定下标的元素
        for (int i = 2; i <= 4; i++) {
            arr[i] = arr[i + 1];
        }
        arr[5] = 0;

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 给定一个数组，删除指定下标为2的元素
     */
    public static void deleteEle3_1() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);
        // 3.删除指定下标的元素
        int index = 2;
        for (int i = index; i <= arr.length - 2; i++) {
            arr[i] = arr[i + 1];
        }
        arr[arr.length - 1] = 0;

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 给定一个数组，删除指定下标为2的元素
     */
    public static void deleteEle3_2() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);
        // 3.删除指定下标的元素
        deleteElementByIndex(arr, 2);

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 提取从数组中删除元素的方法(不确定的参数？哪个数组？哪个下标)
     */
    public static void deleteElementByIndex(int[] arr, int index) {
        for (int i = index; i < arr.length - index; i++) {
            arr[i] = arr[i + 1];
        }
        arr[arr.length - 1] = 0;
    }

    /**
     * 给定一个数组，删除元素30
     */
    public static void deleteEle4() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);

        // 找到要删除的元素的索引
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 30) {
                index = i;
                break;
            }
        }
        // 3.删除指定下标的元素
        for (int i = index; i <= arr.length - 2; i++) {
            arr[i] = arr[i + 1];
        }
        arr[arr.length - 1] = 0;

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 给定一个数组，删除指定元素
     */
    public static void deleteEle5() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);

        // 找到要删除的元素的索引
        int index = -1;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 999) {
                index = i;
                break;
            }
        }
        // 3.删除指定下标的元素
        if (index != -1) {
            for (int i = index; i <= arr.length - 2; i++) {
                arr[i] = arr[i + 1];
            }
            arr[arr.length - 1] = 0;
        } else {
            System.out.println("没有找到你要删除的元素");
        }

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 删除指定元素
     */
    public static void deleteEle5_2() {

        // 1.给定一个数组
        int[] arr = new int[]{10, 20, 30, 50, 40, 60};
        // 2.输出删除前的元素
        String eleStr = Arrays.toString(arr);
        System.out.println("删除元素前的数组: " + eleStr);

        // 找到要删除的元素的索引
        deleteTheElement(arr, 10);

        // 4.输出删除后的元素
        String eleStr2 = Arrays.toString(arr);
        System.out.println("删除元素后的数组: " + eleStr2);
    }

    /**
     * 删除数组中指定元素
     *
     * @param arr 待删除的数组
     * @param ele 需要删除的元素
     */
    public static void deleteTheElement(int[] arr, int ele) {
        int index = -1;
        // 找到要删除元素的索引
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == ele) {
                index = i;
                break;
            }
        }
        // 删除指定下标的元素
        if (index != -1) {
            for (int i = index; i <= arr.length - 2; i++) {
                arr[i] = arr[i + 1];
            }
            arr[arr.length - 1] = 0;
        } else {
            System.out.println("没有找到你要删除的元素");
        }
    }
}
